package _3_Logrus日志处理框架

//go get github.com/sirupsen/logrus
import (
	"os"
	// 导入logrus日志包，别名为log
	log "github.com/sirupsen/logrus"
)

func main() {
	// 设置日志等级
	log.SetLevel(log.DebugLevel)
	// 设置日志输出到什么地方去
	// 将日志输出到标准输出，就是直接在控制台打印出来。
	log.SetOutput(os.Stdout)
	// 设置为true则显示日志在代码什么位置打印的
	//log.SetReportCaller(true)

	// 设置日志以json格式输出， 如果不设置默认以text格式输出
	log.SetFormatter(&log.JSONFormatter{})

	// 打印日志
	log.Debug("调试信息")
	log.Info("提示信息")
	log.Warn("警告信息")
	log.Error("错误信息")
	//log.Panic("致命错误")

	// 为日志加上字段信息，log.Fields其实就是map[string]interface{}类型的别名
	log.WithFields(log.Fields{
		"user_id":    1001,
		"ip":         "123.12.12.11",
		"request_id": "kana012uasdb8a918gad712",
	}).Info("用户登陆失败.")
}
func file() {
	//我们如何将日志保存到本地文件。
	//前面的例子我们知道，可以通过SetOutput函数设置将日志保存到什么地方，下面演示如何将日志保存到文件中。

	// 先打开一个日志文件
	file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err == nil {
		// 设置将日志输出到文件
		log.SetOutput(file)
	} else {
		log.Info("打开日志文件失败，默认输出到stderr")
	}
}

/*自定义日志保存的位置
SetOutput函数定义：
func SetOutput(out io.Writer)
SetOutput函数接受的是一个实现了io.Writer接口的对象，只要实现了这个接口，你可以将日志保存到任何地方，例如，
我们可以自定义个实现了io.Writer接口的日志存储对象，将日志保存到阿里云日志服务。
例子：*/

// 自定义日志存储，实现io.Writer接口
type Alilog struct {
}

// io.Writer接口只有Write一个函数
func (v *Alilog) Write(p []byte) (n int, err error) {
	// 日志内容，传进来的是字节数组

	// 将日志发送到阿里云日志服务
	// 当然这里可以做下缓存，批量想阿里云发送日志，不用一条条的发
	// 设置日志存储方式
	log.SetOutput(&Alilog{})
	return
}
